Bei der Entwicklung des Amiga muà anscheinend Uneinigkeit geherrscht haben. Man könnte fast meinen, es laufen zwei Betriebssysteme in einer Maschine: AmigaDos (in BCPL) und Exec (in C). Da wohl die meisten Amiga-Programmierer in C oder von den Datentypen ähnlichen Sprachen (natürlich auch Modula-2) programmieren, ist es lästig, daà viele Parameter des Dos dem BCPL- und nicht dem Exec-Standard entsprechen. Dieses Modul stellt Prozeduren zur Konvertierung der Datentypen zur Verfügung.
Die Datentypen
APTR/ADDRESS: Byteaddresse, d.h. eine Adresse wie sie direkt vom 68000-Prozessor verwendet wird.
BPTR: BCPL-Pointer bzw. Langwortadresse, also Byteadresse geteilt durch 4. D.h. alle Dos-Strukturen müssen an durch 4 teilbaren (Byte-)Adressen beginnen.
Exec/C-Strings: Zeiger (Byteadressen) auf Bytefolgen, die mit einer Null als Endekennzeichen abgeschlossen sind. Auch Modula-Strings sind mit einer Null abgeschlossen.
BSTR, Dos/BCPL-Strings: Zeiger (Langwortadressen) auf eine Folge von Bytes - das erste Byte enthält die Länge des Strings [0..255], danach folgt der eigentliche String (ohne AbschluÃzeichen).
GetDevList
Gibt einen Zeiger (Byteadresse) auf die Dos-DeviceList zurück. Dieser berechnet sich aus DosBase°.root°.info°.devInfo, wobei zu beachten ist, daà dieser Ausdruck direkt in Modula keinen Sinn gibt, da die Dos-Zeiger ja BPTRs sind. In der DeviceList sind alle gerade verfügbaren Volumes, Devices und assignierten Directories (logische Devices) aufgelistet. Vorsicht: die Verkettung (mit DeviceList.next) geschieht über BPTRs, nicht mit ExecNodes.
BPTRtoADR
Wandelt einen BCPL-Pointer in eine in Modula verwendbare ADDRESS um.
ADRtoBPTR
Wandelte eine ADDRESS in einen BCPL-Pointer. Vorsicht: die Adresse muss durch 4 teilbar sein (Longword-aligned), sonst bricht das Programm mit einer Fehlermeldung ab.
BSTRtoStr
Kopiert einen BCPL-String in einen Modula-2-gerechten (ARRAY OF CHAR).
Aus EinfachheitsgrÃnden wird der String selbst (VAR) und nicht ein Zeiger (so wie in C) übergeben.
StrToBSTR
Konvertiert einen Modula-2-String in einen BCPL-String, wobei allerdings nur die Bytefolge übergeben wird, kein BSTR (BPTR auf BCPL-String). Den BSTR erhält man mit:
StrToBSTR(String);
MyBSTR:=ADRtoBPTR(ADR(String));
Dies wurde so gewählt, weil sonst der String in einen eigenen Speicherbereich kopiert werden müÃte, den DosSupport allozieren müÃte.
Dos.def
In diesem Verzeichnis befindet sich auch die Datei Dos.def, die bei neueren Versionen des M2Amiga-Compilers mitgeliefert wird. In den alten Handbüchern ist die Beschreibung des Dos-Moduls nicht ganz korrekt. Es wird dort nicht zwischen ADDRESS und BPTR unterschieden, was bei Nichtbeachtung das Programm nach Indien schickt (Guru oder "Modula Unterbruch", meist Address Error). Auch sind die meisten Dos-Prozeduren (z.B. Examine) nicht vom Typ BOOLEAN sondern vom Typ LONGINT.
DosBase
Zusätzlich wird von DosSupport die Variable DosBase exportiert, die sonst von Modula nur schwer erreichbar ist. Sie darf gelesen, aber niemals verändert werden.Dokumentation zu "DosSupport" Version 1.0Seite
Autor: Nicolas Benezan, Postwiesenstr.2, 7000 Stuttgart 60